package com.example.demozy.service;

import com.example.demozy.entity.RealNameUser;
import com.example.demozy.entity.User;
import com.example.demozy.entity.UserBasicInformation;
import com.example.demozy.mapper.UserMapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.List;

/**
 * @author 王成龙
 */
@Service
public class UserService {
    // **************** 公开变量

    // **************** 私有变量

    @Autowired
    private UserMapper userMapper;

    // **************** 继承方法

    // **************** 公开方法

    /**
     *
     */
    public List<User> listUsers(String account, String userPwd) {
        return userMapper.listUsers(account, userPwd);
    }

    /**
     * 向user表中插入新一行数据
     *
     * @param userId
     * @param account
     * @param userPwd
     * @param mobile
     * @param email
     * @param realStat
     * @param wechatStat
     * @param walletStat
     * @return
     */
    public int save(String account, String userPwd, String mobile) {
        return userMapper.insert(account, userPwd, mobile);
    }

    /**
     * 注册时新增基本信息表记录
     * @param userId
     * @return
     */
    public int saveBasicInfo(int userId) {
        return userMapper.insertBasicInformation(userId);
    }

    /**
     * 获取user表最新的user_id
     *
     * @return
     */
    public int getMaxUserId() {
        return userMapper.getMaxUserId();
    }

    /**
     * 根据user_id获取用户
     *
     * @param userId
     * @return
     */
    public User getUserByUserId(int userId) {
        return userMapper.getUserByUserId(userId);
    }

    /**
     * 判断账号是否重复
     *
     * @param account
     * @return
     */
    public String getAccountByAccount(String account) {
        return userMapper.getAccountByAccount(account);
    }

    /**
     * 判断手机号是否重复
     *
     * @param mobile
     * @return
     */
    public String getMobileByMobile(String mobile) {
        return userMapper.getMobileByMobile(mobile);
    }

    /**
     * 根据userid获取用户基本信息
     *
     * @param userId
     * @return
     */
    public UserBasicInformation getUserInfoById(int userId) {
        return userMapper.getBasicInfoById(userId);
    }

    /**
     * 根据userid获取实名用户
     *
     * @param userId
     * @return
     */
    public RealNameUser getRealNameUserById(int userId) {
        return userMapper.getRealNameUserById(userId);
    }

    /**
     * 修改基本资料
     *
     * @param userId
     * @param nickname
     * @param userDescription
     * @return
     */
    public int updateBasicInfo(int userId, String nickname,
            String userDescription) {
        return userMapper.updateBasicInfo(userId, nickname, userDescription);
    }

    /**
     * 根据用户id修改邮箱
     * @param userId
     * @param email
     * @return
     */
    public int updateEmailById(int userId, String email) {
        return userMapper.updateEmailById(userId, email);
    }

    /**
     * 插入根据身份证号获得的性别和出生日期
     * @param userId
     * @param gender
     * @param birthday
     * @return
     */
    public int updateGenderAndBirthday(int userId, String gender,
            Date birthday) {
        return userMapper.updateGenderAndBirthday(userId, gender, birthday);
    }

    /**
     * 根据用户id获取实名状态
     * @param userId
     * @return
     */
    public int getRealStatById(int userId) {
        return userMapper.getRealStatByUserId(userId);
    }

    /**
     * 实名认证
     *
     * @param userId
     * @param realName
     * @param idCardNumber
     * @return
     */
    public int realNameAuthentication(int userId, String realName,
            String idCardNumber) {
        userMapper.insertRealNameUser(userId, realName, idCardNumber);
        userMapper.insertUserWalletByUserId(userId);
        userMapper.updateRealStatById(userId);
        return 1;
    }

    /**
     * 根据身份证号返回实名用户表
     *
     * @param idCardNumber
     * @return
     */
    public List<RealNameUser> listRealNameUsersByIdNo(String idCardNumber) {
        return userMapper.listRealNameUsersByIdNo(idCardNumber);
    }

    // **************** 私有方法

}
